12519
17208
Már egy ideje kavarok a JSON-nal, csak szövegként toltam ki, és ez senkit nem bántott (amit tudok), de szeretnék elkezdeni rendesen csinálni a dolgokat.
Annyi állítólagos "szabványt" láttam a JSON tartalomtípushoz:
alkalmazás / json
application / x-javascript
szöveg / javascript
text / x-javascript
szöveg / x-json
De melyik a helyes vagy a legjobb? Megállapítottam, hogy vannak biztonsági és böngészőtámogatási problémák, amelyek eltérhetnek.
Tudom, hogy van egy hasonló kérdés: Milyen MIME típus, ha a JSON-t egy REST API adja vissza ?, de egy kicsit célzottabb választ szeretnék kapni. 
1
2
Következő
JSON szöveg esetén:
alkalmazás / json
A JSON szöveg MIME adathordozó-típusa az application / json. Az alapértelmezett kódolás az UTF-8. (Forrás: RFC 4627).
Visszahívással rendelkező JSONP (futtatható JavaScript) esetén:
alkalmazás / javascript
Íme néhány blogbejegyzés, amelyeket a vonatkozó megjegyzések megemlítettek:
Miért ne használhatna text / html fájlt a JSON-hoz?
Az Internet Explorer programnak néha problémái vannak az alkalmazás / json alkalmazással
A Mimetypes meglehetősen teljes listája és mire használhatók
Az IANA hivatalos mime típuslistája @ gnrfan alábbi válaszából
|
Az IANA regisztrálta a JSON hivatalos MIME-típusát alkalmazás / json néven.
Arra a kérdésre, hogy miért nem szöveg / json, úgy tűnik, Crockford azt mondta, hogy a JSON nem igazán JavaScript vagy szöveg, és az IANA is nagyobb valószínűséggel osztotta meg az / * alkalmazást, mint a szöveget / *.
További források:
Médiatípusok
Kommentárkérés 4627
bluesmoon: A JSON-nak van egy típusa
|
JSON esetében:
Tartalom-típus: application / json
JSON-P esetében:
Content-Type: alkalmazás / javascript
|
Természetesen a JSON megfelelő MIME adathordozó-típusa az application / json, de fel kell ismerni, hogy milyen típusú adatok várhatók az alkalmazásban.
Például az Ext GWT-t használom, és a kiszolgáló válaszának szövegként / html-ként kell szerepelnie, de JSON-adatokat tartalmaz.
Ügyféloldal, Ext GWT űrlapfigyelő
uploadForm.getForm (). addListener (új FormListenerAdapter ()
{
@ Felülírás
public void onActionFailed (űrlap űrlap, int httpStatus, String responseText)
{
MessageBox.alert ("Hiba");
}
@ Felülírás
public void onActionComplete (űrlap űrlap, int httpStatus, String responseText)
{
MessageBox.alert ("Siker");
}
});
Alkalmazás / json válasz típus használata esetén a böngésző javasolja, hogy mentse a fájlt.
Szerveroldali forráskódrészlet a Spring MVC használatával
return new AbstractUrlBasedView ()
{
@SuppressWarnings ("nincs bejelölve")
@ Felülírás
védett void renderMergedOutputModel (Térképmodell, HttpServletRequest kérés,
HttpServletResponse response) dobja a Kivételt
{
response.setContentType ("text / html");
response.getWriter (). write (json);
}
};
|
JSON:
A válasz dinamikusan generált adat, az URL-ben megadott lekérdezési paraméterek szerint.
Példa:
{"Név": "Foo", "Id": 1234, "Helyezés": 7}
Tartalom-típus: application / json
JSON-P:
JSON párnázással.
A válasz JSON adat, körülötte egy függvényhívás.
Példa:
functionCall ({"Név": "Foo", "Id": 1234, "Helyezés": 7});
Content-Type: alkalmazás / javascript
|
Ha Ubuntu vagy Debian rendszert használ, és .json fájlokat szolgáltat az Apache-on keresztül, akkor érdemes a megfelelő tartalmatípussal szolgálnia. Ezt elsősorban azért teszem, mert a JSONView Firefox kiterjesztést akarom használni
A mod_mime Apache modul ezt könnyen megkönnyíti. Az Ubuntunál azonban szerkesztenie kell az /etc/mime.types fájlt, és hozzá kell adni a sort
alkalmazás / json json
Ezután indítsa újra az Apache-t:
indítsa újra a sudo service apache2 programot
|
Ha az ASP.NET Web Services szolgáltatást az ügyfél oldaláról hívja, akkor az alkalmazás / json alkalmazást kell használnia a működéséhez. Úgy gondolom, hogy ez megegyezik a jQuery és az Ext keretrendszerekkel.
|
A JSON megfelelő tartalomtípusa az application / json, Hacsak nem használja a JSONP-t, más néven JSON with Padding, ami valójában JavaScript, és így a megfelelő tartalomtípus az alkalmazás / javascript lenne.
|
Kétségtelen, hogy az application / json a legjobb MIME típus a JSON válaszhoz.
De volt némi tapasztalatom, amikor néhány tömörítési probléma miatt az application / x-javascriptet kellett használnom. A tárhely-környezetem megosztott tárhely a GoDaddy-val. Nem engedik, hogy megváltoztassam a szerver konfigurációit. Az alábbi kódot hozzáadtam a web.config fájlomhoz a válaszok tömörítésére.
















Ennek használatával az .aspx oldalak tömörítésre kerültek a g-zip segítségével, a JSON válaszok azonban nem. hozzáadtam

a statikus és a dinamikus típusok szakaszában. De ez egyáltalán nem tömöríti a JSON válaszokat.
Ezt követően eltávolítottam ezt az újonnan hozzáadott típust, és hozzáadtam

mind a statikus, mind a dinamikus típusú szakaszokban, és megváltoztatta a válasz típusát
.ashx (aszinkron kezelő) a
application / x-javascript
És most azt tapasztaltam, hogy a JSON válaszaimat g-zip segítségével tömörítették. Tehát személy szerint javaslom használni
application / x-javascript
csak akkor, ha JSON-válaszait megosztott tárhelyen szeretné tömöríteni. Mivel a megosztott tárhelyben nem teszik lehetővé az IIS módosításátkonfigurációk.
|
Csak az alkalmazás / json MIME típusaként történő használatakor rendelkezem a következőkkel (2011 novemberétől a Chrome legújabb verzióival, a Firefox és a Firebug):
Nincs több figyelmeztetés a Chrome-tól, amikor a JSON-t a szerverről tölti be.
A Firebug hozzáfűz egy lapot a válaszhoz, amely megmutatja a JSON-adatokat
formázva. Ha a MIME típusa különbözik, akkor csak úgy jelenik meg
„Válasz tartalom”.
|
Nem minden működik a tartalomtípusú alkalmazásoknál / json.
Ha Ext JS űrlap elküldését használja a fájl feltöltéséhez, vegye figyelembe, hogy a böngésző a szerver válaszát elemzi az